package cn.calm.database.service.impl;

import java.sql.SQLException;
import java.util.List;

import org.apache.log4j.Logger;

import cn.calm.commons.entity.PageMode;
import cn.calm.commons.exception.DeskException;
import cn.calm.commons.service.defaultimpl.DefaultServiceImpl;
import cn.calm.database.dao.IDatabaseDao;
import cn.calm.database.entity.ColumnInfo;
import cn.calm.database.entity.TableInfo;
import cn.calm.database.service.ITableInfoService;

public class TableInfoServiceImpl<T extends TableInfo> extends
		DefaultServiceImpl<T> implements ITableInfoService<T> {
	private IDatabaseDao databaseDao;
	private static final Logger logger = Logger
			.getLogger(TableInfoServiceImpl.class);

//	@SuppressWarnings("unchecked")
//	@Override
//	public List<TableInfo> listAllTableInfo() throws SQLException {
//		try {
//			logger.debug("listAllTableInfo start");
//			return databaseDao.listAllTableView((T) new TableInfo());
//		} finally {
//			logger.debug("listAllTableInfo end");
//		}
//
//	}

	@SuppressWarnings("unchecked")
	public T load(T t) throws DeskException {
		T temp = null;
		try {
			logger.debug("load start");
			temp = (T) databaseDao.load(t);
			if (temp == null) {
				throw new DeskException("EM0002", t);
			}
			List<ColumnInfo> list = databaseDao.listAllColumn(t.getId());
			temp.setColumns(list);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		logger.debug("load end");
		return temp;
	};

//	@Override
//	public List<ColumnInfo> listAllColumnByTableName(String name)
//			throws SQLException {
//		try {
//			logger.debug("listAllColumnByTableName start");
//			logger.info("tableName:"+name);
//			return databaseDao.listAllColumn(name);
//		} finally {
//			logger.debug("listAllColumnByTableName start");
//		}
//
//	}

//	@Override
//	public List<List<String>> executSql(String sql) throws SQLException {
//		logger.debug("executSql start");
//		try{
//			logger.info("sqlText:"+sql);
//			return databaseDao.executSql(sql);
//
//		}finally{
//			logger.debug("executSql end");
//		}
//		
//	}

	@SuppressWarnings("unchecked")
	public PageMode listPage(
			PageMode page, T t) {
		try {
			logger.debug("listPage start");
			List<TableInfo> list = databaseDao.listAllTableView(t);
			page.setTotalPage((long) ((list.size() + page.getPageSize() - 1)
					/ page.getPageSize()));
			int endRow = (int) (list.size() > page.getEndRow() ? page.getEndRow()
					: list.size());
			List<TableInfo> subList = list.subList(page.getStartRow(), endRow);
			page.setData((List<T>) subList);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		logger.debug("listPage end");
		return page;
	};
	
	public IDatabaseDao getDatabaseDao() {
		return databaseDao;
	}

	public void setDatabaseDao(IDatabaseDao databaseDao) {
		this.databaseDao = databaseDao;
	}

}
